今天承接昨天 Hello C# 的內容,昨天只寫到 Hello C# 的程式部分,今天把執行編譯完成吧!
由於不是使用 Visual Studio IDE(以下簡稱 VS IDE),因此要執行這段程式的話得靠終端機輸入指令才行。
dotnet run
,也就是執行指令的意思dotnet build
指令由於 .NET Core 預設 build 出來的檔案都是 .dll ,若要像 VS IDE 一樣產生 .exe 檔,就要將在輸出指令上添加一些參數。
變更為 dotnet build -r win-x64
,也就是將執行環境 ( runtime ) 設為 windows ,如此一來就會產生 .exe檔囉!
-r win-x64
輸出 .ext 右下角馬上出現警告視窗,該怎麼處理呢?Error: NETSDK1061: 專案是使用 Microsoft.NETCore.App 版本 2.1.4 還原的,但依照目前設定,使用的版本會是 2.1.0。若要解決此問題,請確認用於還原與後續作業 (例如建置或發佈) 的設定相同。一般而言,若在建置或發佈期間設定了 RuntimeIdentifier,但在還原期間未加以設定,就可能發生這個問題。如需詳細資訊,請參閱 https://aka.ms/dotnet-runtime-patch-selection。
dotnet build
會隱含使用 dotnet restore
指令,變成使用 restore 內的版本號來發布(非目前 .NET SDK 版本),但 restore 內的版本號不一定是最新的,缺少目前 SDK 版本的程式修補內容,才會出現此問題。dotnet build -r win-x64 --no-restore
也就是在指令內加入 --no-restore
使 dotnet restore
指令不會生效,這樣就會使用目前 .NET SDK 版本來發布執行版本,也就包含最新的程式修補內容囉。<TargetLastestRuntimePatch>True</TargetLatestRuntimePatch>
,這樣就可以直接以目前 .NET SDK 版本進行發布,而不用在指令加上 --no-restore
了。因為 .exe 檔內容會在指令完成後自動關閉,因此就只會看到視窗閃一下就消失囉!
若要讓他像 VS IDE 的 Ctrl + F5
(啟動但不偵錯)一樣會停在目前的狀態,那我們 Program.cs 內要再加入 Console.ReadKey();
讓他停下來等我們。
Console.Readkey();
是讀取任意按鍵的意思,用這種方式讓程式停下來等我們輸入指令後結束,藉由這種方式就能達成類似 VS IDE 偵錯的效果囉!
抱歉今天有點離題了,原本是發現忘記在昨天的筆記中補上 dotnet run
輸出的過程,在順順的使用 dotnet run
指令來處理的時候,腦中突然跳出「能不能輸出的時候變得像 Visual Studio 的啟動偵錯功能一樣是新開一個視窗出來呢?」的想法,於是就跳下去嘗試了@@...也因此有了這份紀錄。
不過也因為這樣而理解 VS IDE 的強大,一個簡單的啟動但不偵錯的功能居然需要隱含了這麼多指令,如果不親自用 VS Code 實踐一次輸出還真不知道。為了 build .exe 檔出來找了不少資料,發現有警告的當下還以為自己是亂動了什麼設定,因此將 .NET Core SDK 及 VS Code 完整移除後又重新安裝一次,之後才開始專心的解決錯誤原因。雖然靠著技術文件跟Google大神終於順利解決了問題,但對於微軟技術文件文謅謅的技術詞也是有看沒有懂(太菜),為了要能夠在筆記內解釋給自己聽反覆咀嚼了很多次,最後終於有點懂了(應該),還是希望解釋沒有錯誤啦。明天會繼續回歸 C# 基礎學習筆記主題的。
本機環境教學課程
如何使用 VS Code 建立 .NET Core 開發環境 ?
獨立式部署執行階段向前復原
dotnet build 命令
dotnet restore 命令